#ifndef __BASIC_LOG_H__
#define __BASIC_LOG_H__

#include <basic/thrd.h>

__BEGIN_DECLS

struct _log;
typedef struct _log *LOG;

/*
 * 利用标准输出记录历史
 */
extern int  /* 0:成功 -1:文件名为空字串或太长 -2:文件打开失败 */
log_from_stdout(
        char *log_file      /* [IN] 历史文件名
                               "STDOUT":标准输出 NULL:不输出 */
        );


/*
 * 打开历史
 */
enum
{
    LOG_DATE_SWITCH  = 0x00000001,  /* 历史文件按日期切换 */
    LOG_MULTI_THREAD = 0x00000002   /* 多线程 */
};
extern int /* 0:成功 -1:句柄参数错误 -2:分配句柄出错
              -3:历史文件名无效 -4:打开历史文件出错 */
log_open(
        char *log_file, 	/* [IN] 历史文件名
                               "STDOUT","stdout":标准输出 NULL:不输出 */
        unsigned int flag,	/* [IN] 标志 */
        LOG *plog           /* [OUT] 历史句柄 */
        );
#define log_init log_open

/*
 * 关闭历史
 */
extern void
log_close(
        LOG log	            /* [IN] 历史句柄 */
        );

/*
 * 带格式写历史
 */
extern int	/* 0:成功 */
log_write(
        LOG log,	        /* [IN] 历史句柄 */
        char *format,	    /* [IN] 格式 */
        ...                 /* [IN] 消息 */
        );

/*
 * 写历史
 */
extern int	/* 0:成功 */
log_write_raw(
        LOG log,	        /* [IN] 历史句柄 */
        char *msg	        /* [IN] 消息 */
        );

__END_DECLS

#endif
